console.log("通过混入实现面向对象中的继承")

/**
 * 有一点需要注意，我们处理的已经不再是类了，因为在JavaScript中不存在类，
 * Vehicle 和 Car 都是对象
 * @param sourceObj
 * @param targetObj
 * @returns {*}
 */
 function mixin(sourceObj, targetObj) {
    for (let sourceObjKey in sourceObj) {

        // 子对象中已有的属性、方法就跳过，而不是覆盖
        // 这样就简单的实现了继承
        if (!(sourceObjKey in targetObj)) {
            targetObj[sourceObjKey] = sourceObj[sourceObjKey];
        }
    }
    return targetObj
}

 let vehicle = {
    engines: 1,
    drive() {
        console.log("驾驶有", this.engines, "个引擎的车")
    },
    park(){
        console.log("停下来")
    }
}

  let car = mixin(vehicle, {
    wheel: 4,
    park() {
        console.log("正在停车")
    }
})

let map = {
    navigate(){
        console.log("开始导航")
    }
}

// 手动实现多继承
let mapCar = mixin(map,{...car})


car.drive()
car.park()


mapCar.navigate()

module.exports.vehicle = vehicle
module.exports.mixin = mixin
